\documentclass[latex]{subfiles}
\begin{document}

\part{零散的知识点}

\section{查询文档类内置命令源代码}
\index{latexdef}
\begin{code}
texdoc texdef
latexdef -c book -s mainmatter
\end{code}

\section{将tocolorbox脚注放页面底部}\index{footnote}
\begin{code}
\usepackage{footnote}
\BeforeBeginEnvironment{tcolorbox}{\savenotes}
\AfterEndEnvironment{tcolorbox}{\spewnotes}
\end{code}

\section{相同的脚注使用footref}
\cmd{footref}是\pkg{footmisc}提供的功能，在脚注相同时使用，如：
\begin{codeup}
正文说什么好呢？\footnote{脚注文字……\label{fnlabel}}\\
...\\
还是和上次一样吧\footref{fnlabel}。
\end{codeup}

\section{生成索引}\index{index}
\begin{code}
%\usepackage{imakeidx}
%\makeindex
\printindex
\end{code}

\section{加入目录、手动生成书签}\index{bookmark}
\begin{code}
\addcontentsline{toc}{section}{⟨title⟩}
%\usepackage{hyperref}
\pdfbookmark[level]{bookmark}{anchor}
\end{code}

\section{引用文献}\index{bibliography}
文献环境：
\begin{code}
\cite{test}%在引用文献内容时使用
\begin{thebibliography}{99}
   \bibitem{test} This is a Test.
   \bibitem{test2} This is a Test2.
\end{thebibliography}
\end{code}
bib数据库：
\begin{code}
%\bibliographystyle{plain}%设置文献样式，在导言区使用
\cite{test}%在引用文献内容时使用
\nocite{test2}%列出未被引用的文献，
\nocite{*}%则列出所有未被引用的文献。
\bibliography{$HOME/.texlive/texmf/tex/latex/mybib}%插入文献
\end{code}

\section{浮动体不要跨过section}
\begin{code}
%\usepackage[section]{placeins}%浮动体不要跨过 section
\end{code}
\section{图片满屏}
\begin{code}
%\usepackage{pdfpages}
\includepdf[height=\paperheight,offset=1mm 0mm]{cover.jpg}
\end{code}
\begin{code}
%\usepackage{tikz}
\begin{tikzpicture}[remember picture,overlay,inner sep=0pt]
    \node at (current page.center) 
    {\includegraphics[height=\paperheight,width=\paperwidth,keepaspectratio=false]{cover.jpg}};
\end{tikzpicture}
\end{code}

\section{overpic图片说明}
\begin{codeup}
%\usepackage{overpic}
\begin{overpic}[grid,tics=20,width=0.8\linewidth]{logo}
\put(1,50){文字说明} 
\end{overpic}
\end{codeup}
\section{重复使用图片}
\begin{code}
\newsavebox{\mygraphic}
\sbox {\mygraphic}{\includegraphics[width=0.5\linewidth]{logo}}
\usebox{\mygraphic}
\end{code}
\section{使用某个字体}
\begin{codeup}
\setCJKfamilyfont{SPZ}{DejaVu Sans}
\newcommand{\spz}[1]{{\CJKfamily{SPZ}\char\numexpr"4DBF+#1}}
\spz{2}
\newcommand{\spzz}[1]{{\CJKfontspec{DejaVu Sans}#1}}
\spzz{\char\numexpr"4DBF+3}
\end{codeup}

\section{如何空行}
\begin{code}
~\\ %空一行
~\\\\ %空两行
\end{code}
不保证有效。

\section{foreach}
\begin{codeup}
\foreach \n in {45,90,135,180}{\rotatebox[origin=c]{\n}{\TeX \quad}}
\end{codeup}

\section{箱子}
\subsection{普通箱子}
\begin{codeup}
\mbox{T\hspace{-0.1667em}\raisebox{-0.5ex}{E}\hspace{-0.125em}X}
\end{codeup}
\subsection{带参数普通箱子}
\begin{codeup}
\makebox[3em][s]{鲁迅}
\end{codeup}
\subsection[minipage]{\env{minipage}}
\begin{codeup}
\begin{minipage}[s]{4em}
    故乡
\end{minipage}
\end{codeup}
\subsection{加框箱子}
\begin{codeup}
\fbox{这是个加框箱子}
\end{codeup}
\subsection{带参数加框参数}
\begin{codeup}
\framebox[2\width]{double-width}
\end{codeup}
\subsection{数学环境箱子}
\begin{codeup}
\begin{equation}
    \boxed{x^2=4}
\end{equation}
\end{codeup}
\subsection{升降箱子}
\begin{codeup}
正常水平\raisebox{-0.5ex}{下降}
\end{codeup}
\subsection{段落箱子}
\begin{codeup}
\parbox[t]{6em}{要是超过6个字就给我往下走}
\end{codeup}
\subsection{旋转箱子}
\begin{codeup}
\rotatebox[origin=c]{45}{专}治颈椎病
\end{codeup}
\subsection{缩放箱子}
\begin{codeup}
\resizebox{10em}{1.5em}{\LaTeX}
\end{codeup}
\subsection{缩放箱子}
\pkg{graphicx}包
\begin{codeup}
\scalebox{3}[1]{\LaTeX}
\end{codeup}
\subsection{背景色字}
\begin{codeup}
\colorbox[gray]{0.95}{浅灰色背景}
\end{codeup}
\subsection{全彩}
\begin{codeup}
\fcolorbox{blue}{cyan}{\textcolor{blue}{蓝色边框+文字,青色背景}}
\end{codeup}

\section{一行波浪线}
\begin{code}
{\color{black!80}{\leavevmode\cleaders\hbox to 0.40em{\hss \tiny\textasciitilde \hss }\hfill\kern0pt }}
\end{code}



\section{定义新命令、新环境}
\begin{code}
\newcommand{`\textit{cmd}`}[`\myarg{args}`][`\myarg{default}`]{`\myarg{def}`}
\newenvironment{环境名称}[参数个数][首参数默认值]{环境前定义}{环境后定义}
\renewenvironment{环境名称}[参数个数][首参数默认值]{环境前定义}{环境后定义}
\end{code}
\section{长度单位}
\begin{description}
    \item[pt] point，磅。\label{sec:length}
    \item[pc] pica。1pc=12pt，四号字大小
    \item[in] inch，英寸。1in=72.27pt
    \item[bp] bigpoint，大点。1bp=$\frac{1}{72}$in
    \item[cm] centimeter，厘米。1cm=$\frac{1}{2.54}$in
    \item[mm] millimeter，毫米。1mm=$\frac{1}{10}$cm
    \item[sp] scaled point。1sp=$\frac{1}{65536}$pt ，基本长度单位。
    \item[em] 当前字号下，大写字母M的宽度。
    \item[ex] 当前字号下，小写字母x的高度。
\end{description}

\section{几种距离设置}
\begin{code}
\setlength{\textwidth}{6cm} %页面上文字的总宽度。
\setlength{\linewidth}{0.5\textwidth} %当前行允许的行宽。
\setlength{\lineskiplimit}{3pt}
\setlength{\lineskip}{3pt}
\setlength{\parskip}{1em} %段间距
\linespread{1.5} %行距倍数,缺省的基础行距是1.2倍字号大小
\setlength{\leftskip}{⟨length⟩}%段落的左缩进
\setlength{\rightskip}{⟨length⟩}%段落的右缩进
\setlength{\parindent}{⟨length⟩}%段落的首行缩进
\end{code}
有时候在两行之间,可能包含较高的内容(如分式$\frac{1}{2}$ ),使得前一行底部与后一行顶部的距离小于 limit 值,则此时行距会从由 \cmd{linespread} 改为由 \cmd{lineskip} 控制。
\begin{code}
\setlength{\parskip}{0pt}
\end{code}

\section{分栏}
\begin{codeup}
\begin{multicols}{2}
    希望是本无所谓有，无所谓无的。 这正如地上的路：其实地上本没有路，走的人多了，也便成了路。\\
    鲁迅《故乡》
\end{multicols}
\end{codeup}


\section{〔六角括号〕}
\begin{code}
%\usepackage{stix}
$\lbrbrak\quad\rbrbrak$
\end{code}
\begin{codeup}
\symbol{"3014} %“左”六角括号
\symbol{"3015} %“右”六角括号
\end{codeup}

\section{直接输出图片}
\begin{code}
pdf2svg xx.pdf xx.svg
\end{code}
另外也可以在开头直接加载：
\begin{code}
\documentclass[tikz,convert=pdf2svg,multi=false]{standalone}
\end{code}
使用 \verb|xelatex -shell-escape| 命令编译；另外当 \opt{convert=true} 时，将直接输出png图片。
\section{定制标题页}

\begin{code}
\makeatletter
\def\maketitle{%
%   在这里定义具体内容……
%   标题和日期：\@title \@date
%   “作者”以如下方式定义：
    \begin{tabular}[t]{c}
        \@author
    \end{tabular}\par}
%   可以用\ifdefempty 来检查是否提供值
\makeatother
\end{code}

\section{长表格}
\pkg{supertabular} \pkg{longtable} \pkg{tabu} 等多个宏包都能完成长表格的排版，大致的功能会包括：
\begin{description}
    \item[表头控制：] 首页的表头样式，以及转页后表头的样式。
    \item[转页样式：] 在表格跨页时，页面最下方插入的特殊行，比如to be continued.
\end{description}

这里主要介绍\pkg{longtable}宏包。主要命令：
\begin{description}
    \item[\cmd{endhead}] 定义每页顶端的表头。在表头行用该命令代替\cmd{\char`\\\char`\\}命令来换行即可。
    \item[\cmd{endfirsthead}] 如果首页的表头与其他页不同，使用该命令。
    \item[\cmd{endfoot}] 定义每页底端的表尾。
    \item[\cmd{endlastfoot}] 另外定义末页底端的表尾。
    \item[\cmd{caption}] 与原生tabular的该命令一致。如果你不想显示表格编号，使用带星的该命令；如果不想让其加入表格目录，在可选参数中留空\cmd{caption[]\{...\}}。
    \item[\cmd{label}] 注意\verb|\label|命令不能被用在多页对象中，请在表体中或者firsthead/lastfoot中使用。
    \item[\cmd{LTleft}] 表格左侧到主文本区边缘的距离，默认是\cmd{fill}。你可以用：
    
    \cmd{setlength\char`\\LTleft\{0pt\}}来取消这个距离，进行居左。
    \item[\cmd{LTright}] 类似。
    \item[\cmd{LTpre}] 默认是 \cmd{bigskipamount}  \footnote{这个命令通常是一行左右的竖直距离，12pt$\pm$4pt左右。} ，表格上部到文本的距离。
    \item[\cmd{LTpost}] 类似。
    \item[\cmd{\char`\\ \char91\ldots\char93}] 在换行后插入竖直空距。
    \item[\cmd{\char`\\{*}}] 禁止在该行后立刻进行分页。
    \item[\cmd{kill}] 该行不显示，但用于计算宽度。
    \item[\cmd{footnote}] 该命令不能直接用于表头表尾，先用 \cmd{footnotemark} 命令标记，再用\cmd{footnotetext} 写明脚注内容。
\end{description}

\pkg{longtable}宏包支持的表格可选参数是clr，不能使用t或b. 此外，\textcolor{cored}{longtable中的跨列可能需要编译多次才能正常显示。}



\section{水印}
\begin{code}
\documentclass[tikz,convert=pdf2svg,multi=false]{standalone}
\newcommand{\shuiyin}{水印文本}
\usepackage{draftwatermark} %所有页加水印，firstpage参数可以只在第一页添加水印
\SetWatermarkText{\shuiyin} %设置水印内容，可以是文本，也可以是图片
\SetWatermarkLightness{0} %设置水印透明度 0-1
\SetWatermarkScale{0.1} %设置水印大小 0-1  
\end{code}

\section{竖线vrule}
\begin{codeup}
\setlength{\fboxsep}{0.2pt}
\setlength{\fboxrule}{0.2pt}
\newcommand\mystrut{\vrule height .8em depth 0.2em width 0pt\relax}
脂\hskip -0.5pt 
\colorbox{gray}{\textcolor{white}{砚}\colorbox{white}{\textcolor{gray}{斋\mystrut}}}\textcolor{red}{评红楼梦}
\end{codeup}

\section{把一个页面横过来}
\begin{code}
%\usepackage{atbegshi}
\AtBeginShipoutNext{\special{pdf: put @thispage << /Rotate 90 >>}}
\end{code}

\section{把图表转个90度}
\begin{code}
\usepackage[figuresright]{rotating}
\begin{sidewaystable}[htp]
    ......
\end{sidewaystable}
\end{code}

\section{bend left如何理解}
当bend left=正角度，则其切线是逆时针，right则与其相反，具体如下所示：
\begin{codeup}
\begin{tikzpicture}
    \coordinate(A) at (0,0); \node[left] at (A) {A};
    \coordinate(B) at (3,0); \node[above right] at (B) {B};
    \draw[thick,->] (A)--(B);
    \draw[bend left=30, red] (A) to (B);
    \draw[bend left=-30, blue] (A) to (B);
    \draw[->](A)--+(30:1cm) coordinate (C);
    \pic["$30^\circ$", draw,->, angle radius=.7cm] {angle=B--A--C};
\end{tikzpicture}
\end{codeup}
又如(left标记了红色)：
\begin{codeup}
\tikzstyle{place}=[circle,draw=blue!50,fill=blue!20,thick,inner sep=0pt,minimum size=6mm]
\tikzstyle{transition}=[rectangle,draw=black!50,fill=black!20,thick,inner sep=0pt,minimum size=4mm]
\tikzstyle{pre}=[<-,semithick]
\tikzstyle{post}=[->,semithick]
\begin{tikzpicture}[bend angle=45]
    \node[place] (a) {a};
    \node[place] (b) [below of=a] {b};
    \node[place] (c) [below of=b] {c};
    
    \node[transition] (1) [left of=b] {1}
    edge [post,bend right] (b)
    edge [pre, bend left,red] (a)
    edge [post,bend right] (c);     
    
    \node[transition] (2) [right of=b] {2}
    edge [pre,bend right] (b)
    edge [post,bend right] (a)
    edge [pre, bend left,red] (c);
\end{tikzpicture}
\end{codeup}
\section{英语断字}
\begin{codeup}
\hyphenation{Thu-Thesis}
ThuThesis ThuThesis ThuThesis ThuThesis ThuThesis ThuThesis ThuThesis ThuThesis 
\end{codeup}

\section{邮箱链接}
\begin{codeup}
有事请发\href{mailto:goodaniu@163.com}{邮件}给我。
\end{codeup}

\section{隐藏下划线上的文本内容}
\pkg{xeCJK}包含子宏包\pkg{xeCJKfntef}，可以用它来实现汉字加点和可断行的下划线等，如 \cmd{CJKunderline} \cmd{CJKunderdblline} \cmd{CJKsout} \\ 
\cmd{CJKunderwave}  \cmd{CJKxout} 。还可以用 \cmd{xeCJKsetup} 设置 \opt{hidden}  、\opt{format} 等属性。
比如：
\begin{codeup}
\CJKunderline{床前明月光}
\end{codeup} 
\xeCJKsetup{underline/hidden=true}
\begin{codeup}
\CJKunderline{这句话隐藏}
\end{codeup} 
\xeCJKsetup{underline/hidden=false}
\end{document}